#ifndef GUIAPPLICATION_H_
#define GUIAPPLICATION_H_

#include "map/controllers/RouteController.h"
#include "map/controllers/CarController.h"

#include "app/ApplicationConfig.h"
#include "gui/objects/GUIMap.h"
#include "gui/objects/GUIRoute.h"
#include "gui/GUIEngine.h"
#include "gui/Viewport.h"
#include "util/logger/Logger.h"

#include <string>

namespace gui {

/* @class GUIApplication */
class GUIApplication {
public:

	/* Constructor. */
	GUIApplication(Map* map, RouteController* routeController, CarController* carController,
			int viewportX, int viewportY, int screenW, int screenH,
			int screenBPP, std::string screenCaption, bool fullscreen);

	/* Destructor. */
	virtual ~GUIApplication();

	/* Recupera eventos pendientes. */
	virtual bool pollEvent(InputEvent* event);

	virtual void refreshScreen();

private:
	Viewport* viewport; // Viewport (porcion visible del mapa)
	GUIEngine* engine;  // motor de graficos
	Layer* infoLayer;
	Layer* mapLayer;
	Layer* routeLayer;
	Layer* carLayer;
	util::Logger* logger();
};

}

#endif /* GUIAPPLICATION_H_ */
